﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Modelo_ETdA.Negocio.Analise.Formato;
using Modelo_ETdA.Negocio.Analise;

namespace Modelo_ETdA.Interface
{
    public partial class RegistaFormatoProfissional : Form
    {

        GestorAnalise gestor_analise;
        private DataTable tabela = new DataTable();
        MenuAnaliseETdA menuAnaliseEtda;


        public RegistaFormatoProfissional(GestorAnalise gest_analise, MenuAnaliseETdA anterior)
        {
            InitializeComponent();
            menuAnaliseEtda = anterior;
            this.gestor_analise = gest_analise;
            List<Consideracao> consideracoes = gestor_analise.consultaListaConsideracao();
            tabela.Columns.Add("Consideração");
            tabela.Columns.Add("Máximo Escala");
            tabela.Columns.Add("Mínimo Resposta");
            tabela.Columns["Consideração"].ReadOnly = true;
            DataRow workRow;

            foreach (Consideracao cons in consideracoes)
            {
                workRow = tabela.NewRow();
                workRow["Consideração"] = cons.Descricao;
                workRow["Máximo Escala"] = 2;
                workRow["Mínimo Resposta"] = 1;
                tabela.Rows.Add(workRow);
            }

            lConsFormato.DataSource = tabela;
            lConsFormato.Columns[0].Width += 103;
            lConsFormato.Columns[1].Width += 20;
            lConsFormato.Columns[2].Width += 20;

        }

        private void registar_Click(object sender, EventArgs e)
        {
            if (validaDados() == 1) return;
            try
            {
                FormatoAvaliacaoProfissional form_av;
                DocumentoCabecalho doc_cab = new DocumentoCabecalho(nomeForm.Text, "Cliente", new DateTime(), 1);

                form_av = new FormatoAvaliacaoProfissional(gestor_analise.AmbComercialSessao.Cabeçalho.Cod, nomeForm.Text, doc_cab);

                DataRow workRow;
                int i = 0, minresp, escala;
                int total = tabela.Rows.Count;

                while (i < total)
                {
                    workRow = tabela.Rows[i];
                    escala = Convert.ToInt32(workRow["Máximo Escala"]);
                    minresp = Convert.ToInt32(workRow["Mínimo Resposta"]);
                    form_av.registMin(escala, minresp, 1, i + 1);
                    i++;
                }

                int res = gestor_analise.registaFormatoAvaliacao(form_av, 2, gestor_analise.AmbComercialSessao.Cabeçalho.Cod);
                switch (res)
                {
                    case 0:
                        MessageBox.Show("Formato registado com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        menuAnaliseEtda.Visible = true;
                        this.Visible = false;
                        break;
                    case 2:
                        MessageBox.Show("Nome de formato já registado!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        break;
                    default:
                        MessageBox.Show("Erro ao registar formato!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        menuAnaliseEtda.Visible = true;
                        this.Visible = false;
                        break;
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show("Erro ao registar formato!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                menuAnaliseEtda.Visible = true;
                this.Visible = false;
            }


        }

        private void voltar_Click(object sender, EventArgs e)
        {
            menuAnaliseEtda.Visible = true;
            this.Visible = false;
        }

        private void RegistaFormatoProfissional_FormClosed(object sender, FormClosedEventArgs e)
        {
            menuAnaliseEtda.sair();
        }

        public int validaDados()
        {
            int i = 0;
            try
            {
            if (nomeForm.TextLength == 0)
            {
                MessageBox.Show("Não preencheu o nome do formato!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return 1;
            }

            
                while (i < tabela.Rows.Count)
                {
                    if (Convert.ToInt32(tabela.Rows[i][1]) < Convert.ToInt32(tabela.Rows[i][2]))
                    {
                        MessageBox.Show("Possuiu campos em que o valor mínimo é maior que a escala máxima!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return 1;
                    }
                    if (Convert.ToInt32(tabela.Rows[i][1]) < 2)
                    {
                        MessageBox.Show("O valor Máximo de Escala tem de ser superior a 1 (Escala Mínima)!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return 1;
                    }
                    i++;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Não preencheu todos os valores!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return 1;
            }
            return 0;
        }

        private void lConsFormato_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            int linha, coluna;
            linha = e.RowIndex;
            coluna = e.ColumnIndex;
            try
            {
                if (coluna == 1)
                {
                    if (Convert.ToInt32(tabela.Rows[linha][coluna]) < 1)
                    {
                        MessageBox.Show("Escala máxima tem de ser maior ou igual a 1!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        tabela.Rows[linha][coluna] = "1";
                    }
                }
                else
                {
                    if (Convert.ToInt32(tabela.Rows[linha][coluna]) < 0)
                    {
                        MessageBox.Show("Mínimo Resposta tem de ser maior ou igual a 0!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        tabela.Rows[linha][coluna] = "0";
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show("Preencheu Valores Inválidos!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tabela.Rows[linha][coluna] = "";
            }
        }

        private void RegistaFormatoProfissional_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                registar_Click(this, null);
            }

            if (e.KeyCode == Keys.Back)
            {
                voltar_Click(this, null);
            }
        }



    }
}
